package com.vanzo.encryption;


import java.security.PublicKey;

/**
 * Created by tisen on 2018/1/31.
 */

public class Pdt {

    public Pdt() {
    }

    //返回组密匙
    //输入:无
    //输出:组密匙
    public native String get_groupkey();

    //返回设备摇闭码
    //输入:无
    //输出:组密匙
    public native String get_killkey();

    //在通过NFC发送给从机器之前调用此进行消息组合,主机必须先对本机设置了组号，终端编号，终端总数,firstTid为起始编号,
    //groupId为组号
    //terminalId为终端号
    //firstTid为起始编号
    //gk为isccn_android_pdt_get_groupkey，从机组密匙
    //kk为isccn_android_pdt_get_killkey，从机的摇bi码
    //输出:nfc编码()

//    public native String get_superkey2NFC(int groupId, int terminalId, int firstTid, int totalTerminalSize, String gk, String kk);

    //从机在获取NFC数据后进行解析,然后将out_value通过UART发送给对讲模块

    //groupId设置从机的组号，AT指令
    public native int get_groupId(String nfc);

    //terminalId设置从机的终端号，AT指令
    public native int get_terminalId(String nfc);

    //totalTerminalSize从机的总数
    public native int get_totalTerminalSize(String nfc);

    //firstTid第一个机器的终端号
    public native int get_firstTid(String nfc);

    //out_value为需要转发给对讲模块数据,分配不小于2048字节
    public native String get_out_value(String nfc);

    //Android 生成命令,out_value为封装后通过UART发送信息，ioLen为长度
    //输入：enum
    /*
    {
        PDT_CMD_KILL  = 1,
                PDT_CMD_KILL_ACK,
                PDT_CMD_UPDATE_KEY, //上电时，或者定时发送查询当前是否
                PDT_QUERY_STATUS_KILL, //上电时，或者定时发送查询当前是否
                PDT_QUERY_KEY_WRITE, //下发密钥命令后，查询模块密钥是否写成功
                PDT_CMD_MESSAGE_SEND,//Android侧需要发送一个短信
                PDT_CMD_MESSAGE_RECVD,//对讲侧收到一个短信
                PDT_CMD_ACK_RECVD
    };
     */
    //输出:uart返回信息
    public native String send_uartcmd(int cmd);

    //Android 侧分析URAT返回
    //输入:uart返回信息
    //输出:解析出的一些我们看的懂
    public native String parse_uartcmd(String uart);


    public native String stringFromJNI();

    public static int MAX_BUFFER_LEN = 1024;

    public static native int systemCommand(byte[] inValue, byte[] outValue, Integer outLen);
    public static native int getSuperkey2NFC(int groupId, int terminalId, int totalTerminalSize, byte[] value, Integer iLen);



    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("crypdt");
        System.loadLibrary("native-lib");
    }
}
